#ifndef APP_H
#define APP_H

// ###########################################################################################################################################
// MODELO DO RECURSOS DE HARDAWARES
#define MODEL			"hr01"
#define FIRMWARE_VERSION "1.0"
#define PROGAM_NAME "examples " MODEL " firmware v" FIRMWARE_VERSION " [compiled in " __DATE__ " " __TIME__ "]" CMD_TERMINATOR


// ###########################################################################################################################################
// INCLUDES OBRIGATÓRIAS
#include "_config_cpu_.h"
#include "stdio_uc.h"
#include "systick.h"
#include "delay.h"
#include "led_error.h"
#include "beep.h"
#include "gkey.h"
#include "liquid_crystal.h"

#include "ssp1.h"
#include "ili9341.h"
#include "gfx.h"


// ###########################################################################################################################################
// RELAYS
typedef struct {
	int st; // estado dp rele
	volatile uint timeout; // contagem de tempo em ms para voltar ao estado anterior do rele
} tRelay, *pRelay;

// ###############################################################################
// CONTROL
typedef struct {
	volatile uint ticks;
	volatile char key;	// Valor do teclado pressionado
	tRelay relay1;
	tRelay relay2;
} tControl, *pControl;
tControl control;

void relay_Init(void);
void relay_Tick(void);
int relay_Set(int rly, int st, uint timeout);

void onKeyDown(char key);
void onKeyPress(char key);
void onKeyUp(char key);

void app_Init(void);
void app_Tick(void);
void app_Process(void);

void prompt_Process(void);

#define ledB_Init()		(GPIO1_DIR |= BIT_28)
#define ledB_On()		(GPIO1_SET = BIT_28)
#define ledB_Off()		(GPIO1_CLR = BIT_28)

void tft_BackLight(int st);

void test_FillScreen(void);
void test_Lines(u16 color);
void test_FastLines(u16 color1, u16 color2);
void test_Circles(u8 radius, u16 color);
void test_FilledCircles(uint radius, uint color);
void test_Triangles(void);
void test_FilledTriangles(void);
void test_RoundRects(void);
void test_FilledRoundRects(void);
void test_Rects(uint color);
void test_FilledRects(uint color1, uint color2);
void test_Printf(void);
void test_Text(void);
void test_Buttons(void);

#endif
